package org.hyou.demos.msg.seri.adapter;

import org.msgpack.template.Template;

import com.fasterxml.jackson.databind.JavaType;

/**
 * 类型获取
 * 
 * @param <T> 存储到缓存里的数据对象类型
 * @author Changshuo.Feng
 * @version 2.0.0 2015年1月8日 下午5:34:33 初始创建
 */
public interface MyTypeReference<T> {
    
    /**
     * <pre>
     * 获取缓存中存储的数据对象的类型
     * 适用场景：数据以Java对象的形式缓存到JVM形式的虚拟机中，在从缓存中取值的时候根据该方法确定将数据反序列化成哪种类型的对象
     * 
     * 版本修改历史记录：
     * 1) 2.0.0 2015年1月9日 上午9:37:58 Changshuo.Feng 初始创建
     * </pre>
     * 
     * @return 缓存中存储的数据对象的类型
     */
    public Class<T> getClassType();
    
    /**
     * <pre>
     * 获取缓存中存储的数据对象的类型
     * 适用场景：数据以JSON字符串形式放到缓存中（例如Redis），从缓存中取出的是字符串值，要通过Json类库将其反序列化为相应的数据
     * 对象，该方法返回用于JSON反序列化的匹配对象类型。
     * 
     * 版本修改历史记录：
     * 1) 2.0.0 2015年1月9日 上午9:44:48 Changshuo.Feng 初始创建
     * </pre>
     * 
     * @return JSON反序列化时的匹配类型
     */
    public JavaType getJavaType();
    
    /**
     * <pre>
     * 获取缓存中存储的数据对象的类型
     * 适用场景：数据以MessagePack形式存储到缓存中（byte[]），从缓存中取出的是二进制数据，要通过MessagePack类库将其反序列化
     * 为相应的数据对象。
     * 该方法返回用于MessagePack反序列化的匹配对象类型。
     * 
     * 版本修改历史记录：
     * 1) 2.0.0 2015年4月28日 下午5:00:32 Changshuo.Feng 初始创建
     * </pre>
     * 
     * @return MessagePack反序列化时的匹配类型
     */
    public Template<T> getTemplate();
    
}
